/**
 * 
 */
package com.ls.lserp.modules.order.dao;

import java.math.BigDecimal;
import java.util.List;

import com.ls.lserp.common.persistence.CrudDao;
import com.ls.lserp.common.persistence.annotation.MyBatisDao;
import com.ls.lserp.dbaccess.Entity.ProductionItemEntity;
import com.ls.lserp.dbaccess.Entity.StyleMaterialEntity;
import com.ls.lserp.dbaccess.Entity.StyleOptionREntity;
import com.ls.lserp.modules.order.entity.*;
import com.ls.lserp.modules.produce.entity.ProduceLicense;
import com.ls.lserp.modules.common.entity.Material;
import com.ls.lserp.modules.setting.entity.Ognization;
import com.ls.lserp.modules.setting.entity.OperatingEntity;
import com.ls.lserp.modules.trade.entity.ConsignmentNote;
import com.ls.lserp.modules.trade.entity.Settlement;


/**
 * 订单DAO接口
 * @author zq
 * @version 2016-10-31
 */
@MyBatisDao
public interface OrderDao extends CrudDao<Order> {

	public List<Order> getShop(Order order);
	/**
	 * 插入定制单耗信息
	 * @param order
	 * @return
	 */
	public void insertExcelData(StyleOptionEntity styleOptionEntity);
	/**
     * 获取订单信息
     * @param order
     * @return
     */
    public List<Order> findOrderList(Order order);
    /**
     * 获取StyleOption信息
     * @param styleID
     * @return
     */
    public List<StyleOptionEntity> findStyleOptionList(Long styleID);
    
    /**
     * 根据订单导出设计信息
     * @param order
     * @return
     */
    public List<Order> exportDesignOptionByOrderId(Order order);
	
	/**
     * 根据订单导出辅料信息
     * @param order
     * @return
     */
    public List<Order> exportMixInfo(Order order);

    /**
     * 根据订单查询设计信息
     * @param order
     * @return
     */
    public List<DesignOption> findDesignOptionByOrderId(Order order);
    
   
    /**
     * 查询订单量体信息
     */
     public List<FitProperty> findFitInFoListByOrderId(Order order);
     
     
    /**
     *根据面料ID查找面料信息
     * @param order
     * @return
     */
    public List<Material> searchInfoByMaterialId(Order order);

    /**
     * 根据订单查询设计信息(辅料)
     * @param order
     * @return
     */
    public List<DesignOption> findDesignOptionMaterialByOrderId(Order order);

    /**
     * excel导入(订单表插入)
     * @param order
     * @return
     */
    public void inserOder(Order order);
    /**
     * excel导入(款式表插入)
     * @param bigcargoStyle
     * @return
     */
    public void inserStyle(BigcargoStyle bigcargoStyle);
    /**
     * excel导入(订单款式关联表)
     * @param orderId
     * @param styleId
     * @return
     */
    public void inserOderAndStyle(long orderId,long styleId);
    /**
     * excel导入(原辅料ID取得)
     * @param materialCode
     * @return
     */
    public String selectMaterial (String materialCode);

    /**
     * 自带面料ID取得
     * @param materialCode
     * @return
     */
    public String selectMaterialCustom (String materialCode);
    /**
     * excel导入(款式设计项目关联表插入)
     * @param bigcargoStyle
     * @return
     */
    public void insertOpintion(BigcargoStyle bigcargoStyle);
    /**
    * excel导入(款式设计项目费用关联表插入)
    * @param bigcargoStyle
    * @return
    */
   public void insertStyleCost(BigcargoStyle bigcargoStyle);
    /**
     * excel导入(量体实际表)
     * @param bigcargoStyle
     * @return
     */
    public void insertFitStyle (BigcargoStyle bigcargoStyle);
    /**
     * 线号
     * @param
     * @return
     */
    public List<DesignOption> getdesignList();
    /**
     * DesignOption数据
     * @param
     * @return
     */
    public List<DesignOption> findDesignOption(Order order);

    public void creaateTempTabel(Order order);
    public void insertStyleNo(Long styleId,String styleNo);
    public void updateStyleNo(String orderNO,String styleNo);
    public void updateStyleNoSBU(String orderNO,String styleNo);
    //更新订单箱单基础信息
    public void updateNormalDataByOrderNo(Order order);
    //更新订单箱单补充信息
    public void updateSupplementDataByOrderNo(Order order);
    public List<Order> findTemp();

    /**
     * 查询需要导出的数据
     * @param order
     * @return
     */
    public List<Order> findAllListExport(Order order);


    public List<Order> getOrderExport(Order order);


    public List<Order> findListExport(Order order);


    /**
     * 获取面料信息
     * @param fabricCode
     * @return
     */
    public Material getMaterialInfo(String fabricCode);
    /**
     * 获取定制费用明细信息
     * @param styleId
     * @return
     */
    public List<StyleCostEntity> findStyleCostList(Long styleId);
    /**
     * 查询定制单耗（导出）
     * @param styleOptionEntity
     * @return
     */
    public List<StyleOptionEntity> findStyleUnitCost(StyleOptionEntity styleOptionEntity);
    /**
     * 查询定制单耗（导出）
     * @param styleOptionEntity
     * @return
     */
    public List<StyleOptionEntity> findUnitCostList(StyleOptionEntity styleOptionEntity);
    /**
     * 查询定制单耗数据（单耗重新计算）
     * @param styleOptionEntity
     * @return
     */
    public List<StyleMaterialEntity> findStyleMaterial(StyleOptionEntity styleOptionEntity);
    /**
     * 查询定制款式ID（导出）
     * @param styleOptionEntity
     * @return
     */
    public List<StyleOptionEntity> findStyleIDList(StyleOptionEntity styleOptionEntity);
    /**
     * ID获取定制款式信息（导出）
     * @param styleOptionEntity
     * @return
     */
    public StyleOptionEntity getStyleInfo(StyleOptionEntity styleOptionEntity);
    /**
     * 自带面料ID获取定制款式信息（导出）
     * @param styleOptionEntity
     * @return
     */
    public StyleOptionEntity getStyleCustomInfo(StyleOptionEntity styleOptionEntity);
    /**
     * 获取单耗
     * @return
     */
    public List<StyleOptionEntity> findSizeUnitCost();
    /**
     * 获取面料ID
     * @param styleID
     * @return
     */
    public Long getMaterialID(String materialCode);
    /**
     * 条形表插入
     * @param barCode
     * @return
     */
    public int inserBarCode(BarCode barCode);
    /**
     * 条形表插入(扣)
     * @param barCode
     * @return
     */
    public int inserBarCodeSBU(BarCode barCode);
    /**
	 * 获取品控信息 
	 * @return
	 */
	public List<StyleOptionEntity> findQualityControl();
	/**
     * 品控表插入
     * @param order
     * @return
     */
    public int insertStyleControl(BigcargoStyle bigcargoStyle);
	
    public String selectMakeType(String makeType);
    
    /**
     * 可导出工序list生成
     * @return
     */
    public List<OperatingEntity> selectImportOperatingId ();

    /**
     * 工序list生成
     * @return
     */
    public List<OperatingEntity> selectOperatingId ();
    /**
     * 表头list生成
     * @return
     */
    public int labelList (Order order);
    /**
     * 设计项目实际值
     * @return
     */
    public List<Order> selectOpValueExcelList(Order order);
    public List<Order> selectOptionValueList(Order order);
    /**
     * 量体项目Code值
     * @return
     */
    public List<Order> selectFitCodeList(Order order);
    /**
     * 通过合同ID获取订单集
     * @return
     */
    public List<Order> findOpOrderList(Order order);
    /**
     * 获取袖头信息
     * @return
     */
    public String getSCUByStyleId(Long styleId);
    /**
     * 片总和
     * @return
     */
    public Integer selectSum(long styleId);
    
    /**
	 * 导出走货明细
	 * @return
	 */
	public List<TransportGoodsDetail> exportTGDetail(TransportGoodsDetail transportGoodsDetail);

    /**
     * 尺码项目
     * @return
     */
    public Order selectFitValue(long styleId);

    public void insertTempTable(Order order);
    public void insertStyleNoTampTable(Long styleId,String styleNo);
    
    /**
     * 获取客户列表
     * @return
     */
    public List<Ognization> findCustomList();
    
    /**
     * 插入定制合同
     * @return
     */
    public int insertContract(CustomizationContract customizationContract);
    
    /**
     * 插入定制合同详情
     * @return
     */
    public int insertContractDetail(Long contractID,Long orderID,int cartonInfoStatus);
    
    /**
     * 插入一条生产制单
     * @return
     */
    public int insertPLicense(ProduceLicense produceLicense);
    
    /**
     * 检查订单号是否存在
     * @return
     */
    public Order checkOrderExist(String orderNo);
    
    /**
     * 更新初始订单信息
     * @return
     */
    public int updateNormalOrderData(Order order);
    
    /**
     * 更新补充订单信息
     * @return
     */
    public int updateSupplementOrderData(Order order);
    
    /**
     * 更新定制合同信息
     * @return
     */
    public int updateCustomContract(CustomizationContract customizationContract);
    
    /**
     * 获取合同信息
     * @return
     */
    public CustomizationContract getContractID(Long orderID);
    
    
    /**
     * 通过款式ID获取面料参考单耗
     * @return
     */
    public BigDecimal getMaterialUnitCost(StyleOptionEntity styleOptionEntity);
    
    //-------------------------------------------定制合同----------------------------------------------------//
    
    /**
     * 定制合同一览
     * @return
     */
    List<CustomizationContract> findContractList(CustomizationContract customizationContract);
    
    /**
     * 查看定制合同信息
     * @return
     */
    CustomizationContract getContractInfo(Long contractId);
    
    /**
     * 通过合同号查询一条合同信息
     * @return
     */
    CustomizationContract getContractByNo(String contractNo);
    
    /**
     * 获取所有合同ID集
     * @return
     */
    List<CustomizationContract> findContractIdList(CustomizationContract customizationContract);
    
    /**
     * 定制款式_款式生产工序子表
     * @return
     */
    public void  insertStyleOperationtings(StyleOperationtings styleOperationtings);
    public void  insertOperatingList(List<StyleOperationtings> operatingList);
    public void  updateOperatingList(List<StyleOperationtings> operatingList);
    public List<StyleOperationtings> findOperatingData(CustomizationContract customizationContract);
    public void  deleteOperatingDataByID(Long operatingId);
    /**
     * 更新合同状态
     * @return
     */
    public void  updateCustomContractStatus(Long id,String status);
    /**
     * 更新标记
     * @return
     */
    public int  updateUrgentCd(String urgentCD,String orderNO);
    /**
     * 更新临时表的标记
     * @return
     */
    public int  updateTempOorderByOrderNO(String urgentCD,String orderNO);
    
    /**
     * 更新状态order表
     * @return
     */
    public int updateStatus(Order order);
    
    /**
     * 更新状态Temp表
     * @return
     */
    public int updateStatusTemp(Order order);
    
    /**
     * 通过OrderID获取吊牌信息
     * @return
     */
    public String getHangtagByOrderID(Order order);
    
    /**
     * 查看定制订单信息
     * @return
     */
    OrderListShowEntity getOrderInfo(String styleId);
    
    
    public List<OrderListShowEntity> getShirtStyle(String styleId);
    
    /**
     * 获取新插入的订单集
     * @return
     */
    public List<Order> findNewOrderList(CustomizationContract customizationContract);
    
    /**
     * 获取所有工序
     * @return
     */
    public List<OperatingEntity> findOperatingList();
    
    /**
     * 插入生产工票表
     * @return
     */
    public int insertProItem(ProductionItemEntity productionItemEntity);
    
    /**
     * 获取订单质检状态信息
     * @return
     */
    public Order getOrderQuatityInfo(Long orderId);
    
    /**
     * 更新订单生产状态
     * @return
     */
    public int updateProduceStatus(Order order);
    
    /**
     * 通过交货日期获取合同的合计费用
     * @return
     */
    public Order getCostByDate(ConsignmentNote consignmentNote);
    
    /**
     * 更新订单生产状态
     * @return
     */
    public int updateOrderStatus(Settlement settlement);
    /**
     * 更新temp状态
     * @return
     */
    public int updateOrderTempStatus(Settlement settlement);
    
    /**
     * 获取状态不是结算完了的订单数量
     * @return
     */
    public int getOrderNum(Settlement settlement);
    
    /**
     * 更新合同表状态为结算完了
     * @return
     */
    public int updateContractStatus(Settlement settlement);
    
    /**
     * 更新合同表状态为结算完了
     * @return
     */
    public int updateUnitCostStatus(Long styleId);
    
    /**
     * 通过款式ID获取和计算扣有关的数据
     * @return
     */
    public List<StyleOptionREntity> findInfoAboutSBU(Long styleId);
    
    /**
     * 通过表主ID更新单耗表数据
     * @return
     */
    public int updateStyleMaterial(StyleMaterialEntity styleMaterialEntity);
    
    /**
     * 通过款式ID更新option表扣数量
     * @return
     */
    public int updateOptionSBUCount(StyleOptionEntity styleOptionEntity);
    /**
     * 款式ID获取订单信息
     * @return
     */
    public Order getOrderByStyleId(long styleId);
    
    /**
     * 更新款式备注（订单费用）
     * @param order
     * @return
     */
    public int updateStyleRemarks(Order order);
}
